﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NUnit.Framework;

using Working.Domínio.Produtos;

namespace Working.Domínio.Produtos.Teste
{
    [TestFixture]
    public class TesteProduto
    {

        [Test]
        public void TestaConstrutor1()
        {
            ItemID id = new ItemID("55555");
            string nome = "Caixa de Lápis";
            decimal preço = 1.95M;

            Produto produto = new Produto(id, nome, preço);
            Assert.AreEqual(id, produto.ItemID);
            Assert.AreEqual(nome, produto.Nome);
            Assert.AreEqual(preço, produto.Preço);
        }

        [Test]
        public void TestaConstrutor2()
        {
            Produto produto = new Produto();
            Assert.AreEqual(string.Empty, produto.ItemID.ToString());
            Assert.AreEqual(string.Empty, produto.Nome);
            Assert.AreEqual(0M, produto.Preço);
        }

        [Test]
        public void TestaConstrutor3()
        {
            string id = "55555";
            string nome = "Caixa de Lápis";
            decimal preço = 1.95M;

            Produto produto = new Produto(id, nome, preço);
            Assert.AreEqual(new ItemID(id), produto.ItemID);
            Assert.AreEqual(nome, produto.Nome);
            Assert.AreEqual(preço, produto.Preço);
        }

        [Test]
        public void TestaPropriedades()
        {
            string nome = "Caixa de Som";
            decimal preço = 250M;
            ItemID itemID = new ItemID("0123456789");
            
            Produto produto = new Produto();
            produto.Nome = nome;
            produto.Preço = preço;
            produto.ItemID = itemID;

            Assert.AreEqual(nome, produto.Nome);
            Assert.AreEqual(preço, produto.Preço);
            Assert.AreEqual(itemID, produto.ItemID);
        }

        [Test]
        [ExpectedException(typeof(PreçoInválidoException))]
        public void TestaPreçoComValorNegativo()
        {
            Produto produto = new Produto();
            produto.Preço = -100M;
        }

        [Test]
        public void TestaToString()
        {
            Produto produto = new Produto();
            Assert.AreEqual(string.Empty, produto.ToString());

            string nomeDoProduto = "Camisa do Cruzeiro";
            produto.Nome = nomeDoProduto;
            Assert.AreEqual(nomeDoProduto, produto.ToString());
        }
    }
}
